import moment from "@/utils/moment"
import { dataFormat } from "@/utils/bus";
import { toPara, ConstVar } from "@/utils/base";

export const docType: string = "ECardRule";

/**
 * 卡券版本
 */
export let COUPON_VER = new ConstVar({
  SP: {
    code: 1,
    name: "商品券"
  },
  DP: {
    code: 2,
    name: "店铺券"
  }
});

/**
 * 卡券类型
 */
export const COUPON_TYPE = new ConstVar<number, {
  ver: any
}>({
  MJ: {
    code: 1,
    name: "商品满减",
    ver: COUPON_VER.getCode("SP")
  },
  ZJ: {
    code: 2,
    name: "商品直减",
    ver: COUPON_VER.getCode("SP")
  },
  ZK: {
    code: 3,
    name: "商品折扣",
    ver: COUPON_VER.getCode("SP")
  },
  MJ_D: {
    code: 4,
    name: "店铺满减",
    ver: COUPON_VER.getCode("DP")
  },
  ZJ_D: {
    code: 5,
    name: "店铺直减",
    ver: COUPON_VER.getCode("DP")
  },
  ZK_D: {
    code: 6,
    name: "店铺折扣",
    ver: COUPON_VER.getCode("DP")
  }
})

/**
 * 折扣类型
 */
export const DIS_TYPE = new ConstVar({
  TJ: {
    code: 1,
    name: "条件折扣"
  },
  TY: {
    code: 2,
    name: "统一折扣"
  },
})

/**
 * 券有效期
 */
export const VALID_TYPE = new ConstVar({
  TJ: {
    code: 1,
    name: "限定日期有效"
  },
  TY: {
    code: 2,
    name: "领后n内天有效"
  },
})

/**
 * 券使用状态
 */
export const ACTION_STATUS = new ConstVar({
  W: {
    code: 0,
    name: "未使用"
  },
  Y: {
    code: 1,
    name: "已使用"
  },
})

/**
 * 卡券自定义状态
 */
export const ACTION_ZDY_STATUS = new ConstVar({
  NONE: {
    code: 0,
    name: "正常"
  },
  WDYXQ: {
    code: 1,
    name: "未到有效期"
  },
  YGQ: {
    code: 2,
    name: "已过期"
  },
  YSY: {
    code: 3,
    name: "已使用"
  },
})

/**
 * 卡券模板
 */
export class ECardRuleDataClass {

  Id: number = 0;

  /**
   * 版本号
 */
  UnionGuid: string = "";

  /**
  * 券名称
  */
  CouponName: string = "";

  /**
   * 券类型，1（商品满减） 2（商品直减） 3（商品折扣） 4（店铺满减）5（店铺直减）6（店铺折扣）
   */
  CouponType: number = 1;

  /**
   * 券版本，1（商品券）2（店铺券）都是数量类型 3（储值券金额类型）
   */
  CouponVersion: number = 1;
  /**
   * 减n元（满n元减、直减）
   */
  DiscountFee: number = 0;
  /**
   * 打几折 （条件折扣、统一折扣 ）
   */
  DiscountRate: number = 0;
  /**
   * 折扣类型，（仅券类型为：商品折扣、店铺折扣会存在）：1（条件折扣）2（统一折扣）
   */
  DiscountType: number = 0;
  /**
   * 每人限量数
   */
  LimitCount: number = 0;
  /**
   * 1（店铺首页） 2（指定商品）
   */
  LinkProductId: number = 0;
  /**
   * 链接类型
   */
  LinkType: number = 0;
  /**
   * 领券时间结束
   */
  OnLineEndDate: string = "";
  /**
   * 领券时间开始
   */
  OnLineStartDate: string = "";
  /**
   * 满n件
   */
  ProductCnt: number = 0;
  /**
   * 满n元
   */
  ProductPrice: number = 0;
  /**
   * 状态
   */
  Status: number = 0;
  /**
   * 发放张数
   */
  StockCount: number = 0;
  /**
   * 券有效天数
   */
  ValidDayNum: number = 0;
  /**
   * 券有效期结束
   */
  ValidEndDate: string = "";
  /**
   * 券有效期开始
   */
  ValidStartDate: string = "";

  /**
   * 用于计算日期
   */
  get _validDate(): any {
    return [this.ValidStartDate, this.ValidEndDate]
  }

  set _validDate(para: any) {
    if (para && para.length == 2) {
      this.ValidStartDate = para[0];
      this.ValidEndDate = para[1];
    } else {
      this.ValidStartDate = "";
      this.ValidEndDate = "";
    }
  }
  /**
   * 券有效期类型，1（限定日期有效） 2（领后n天有效）
   */
  ValidType: number = 1;

  /**
   * 备注
   */
  Note: string = "";

  /**
   * 使用条件
   */
  get _使用条件() {
    switch (this.CouponType) {
      //满减券
      case COUPON_TYPE.getCode('MJ_D'):
      case COUPON_TYPE.getCode('MJ'):
        return `满${this.ProductPrice}元可用`

      //直减券
      case COUPON_TYPE.getCode('ZJ'):
      case COUPON_TYPE.getCode('ZJ_D'):
        return `无门槛使用`

      //折扣券
      case COUPON_TYPE.getCode('ZK'):
      case COUPON_TYPE.getCode('ZK_D'):
        if (this.DiscountType == DIS_TYPE.getCode('TY')) {
          return `无门槛使用`
        } else {
          return `满${this.ProductCnt}件可用`
        }
      default: {
        return ""
      }
    }

  }


  /**
  * 卡券价格
  */
  get _卡券价格() {
    switch (this.CouponType) {
      //满减券
      case COUPON_TYPE.getCode('MJ_D'):
      case COUPON_TYPE.getCode('MJ'):
      //直减券
      case COUPON_TYPE.getCode('ZJ'):
      case COUPON_TYPE.getCode('ZJ_D'):
        return `￥${this.DiscountFee}`;
      //折扣券
      case COUPON_TYPE.getCode('ZK'):
      case COUPON_TYPE.getCode('ZK_D'):
        return `${this.DiscountRate}折`;

      default: {
        return ""
      }
    }
  };


  /**
   * 有效期
   */
  get _有效期() {
    switch (this.ValidType) {
      //领后n内天有效
      case VALID_TYPE.getCode('TY'):
        return `领取后${this.ValidDayNum}天内有效`

      //限定日期有效
      case VALID_TYPE.getCode('TJ'):
        return `${dataFormat(this.ValidStartDate, "YYYY-MM-DD")}至${dataFormat(this.ValidEndDate, "YYYY-MM-DD")}`
    }
  };

  /**
   * 是否过期
   */
  get _isGq() {
    switch (this.ValidType) {
      //领后n内天有效
      case VALID_TYPE.getCode('TY'):
        return false

      //限定日期有效
      case VALID_TYPE.getCode('TJ'):
        return moment().isAfter(moment(this.ValidEndDate), "day")
    }
    return false
  }


  constructor(para: any) {
    toPara(this, para);
  }
}

/**
 * 实际卡券
 */
export class ECardRuleActionClass {

  "Id": number = 0;

  /**
   *卡券uid码
   */
  "DocEntity": string = "";

  /**
   * 卡券的有效期开始
   */
  "StartDate": string = ""

  /**
   * 卡券的有效期结束
   */
  "EndDate": string = "";

  /**
   * 使用状态
   */
  Status: number = 0;

  /**
   * 自定义状态
   */
  get _status() {
    if (this.Status == ACTION_STATUS.getCode('Y')) {
      //已使用
      return ACTION_ZDY_STATUS.getCode("YSY")
    } else {
      let date_new = moment();
      let date_end = moment(this.EndDate);
      let date_start = moment(this.StartDate);
      if (date_new.isAfter(date_end, "day")) {
        //已过期
        return ACTION_ZDY_STATUS.getCode("YGQ")
      } else if (date_new.isBefore(date_start, "day")) {
        //未到有效期
        return ACTION_ZDY_STATUS.getCode("WDYXQ")
      } else {
        //正常
        return ACTION_ZDY_STATUS.getCode("NONE")
      }
    }
  };

  /**
   * 自定义状态的名称
   */
  get _statusName() {
    return ACTION_ZDY_STATUS.codeGetName(this._status);
  }

  /**
  * 有效期
  */
  get _有效期() {
    let startDate = dataFormat(this.StartDate, "YYYY-MM-DD");
    let endDate = dataFormat(this.EndDate, "YYYY-MM-DD");
    let date_new = moment();
    let date_end = moment(endDate);
    if (date_new.isSame(date_end, "day")) {
      return "有效期仅剩1天"
    } else {
      return `${startDate}至${endDate}`
    }
  };

  "ECardRule": ECardRuleDataClass;

  constructor(para: any) {
    toPara(this, para);
    if (para.ECardRule) {
      this.ECardRule = new ECardRuleDataClass(para.ECardRule);
    }
  }
}

/**
 * 获取卡券列表信息
 */
// function get